/*
qnettest - Qt4 application for testing network performance
Copyright (C) 2007  Pyry Haulos

This program is free software; you can redistribute it and/or
modify it under the terms of the GNU General Public License
as published by the Free Software Foundation; either version 2
of the License, or (at your option) any later version.

This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
GNU General Public License for more details.

You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
*/

#include <QtCore>
#include <QtNetwork>
#include "tcpserverhelper.hpp"
#include "tcpproto.hpp"

TcpServerHelper::TcpServerHelper(int socketDescriptor, TcpProtoTestData * data, QObject * parent):QThread(parent)
{
	this->socketDescriptor = socketDescriptor;
	testdata = data;
}

TcpServerHelper::~TcpServerHelper()
{
	// cleanup?
#ifdef TCPSERVERHELPER_DEBUG
	qDebug() << "TcpServerHelper::~TcpServerHelper():" << QObject::tr("client disconnected");
#endif
}

void TcpServerHelper::run()
{
	QTcpSocket socket;

	if (!socket.setSocketDescriptor(socketDescriptor)) {
		emit error(socket.error());
		showLastError(&socket);
		return;
	}

	TcpProto testproto(&socket, testdata);

	connect(&socket, SIGNAL(disconnected()), this, SLOT(terminate()));

	forever {
		if (!socket.isOpen())
			return;

		if (socket.waitForReadyRead(1000)) {
			if (!testproto.reply())
				return;
		} else
			return;
	}
}

void TcpServerHelper::showLastError(QTcpSocket * socket)
{
	qWarning() << "TcpServerHelper::error():" << socket->errorString();
}
